package com.ys.p1LinkedHashMap的了解;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * 描述:
 *  * 1.LinkedHashMap类的使用
 *  *   LinkedHashMap类的使用和HashMap一模一样，也都是需要重写key对应类的hashCode()方法和equals()方法。
 *  * 2.LinkedHashMap类的底层
 *  *   LinkedHashMap的底层采用了“哈希表+链表”方式来实现，因此LinkedHashMap存储的键值对是有序的。
 *  * 注意：LinkedHashMap 类我们了解即可。
 *  效率一般低于HashMap 但是有序,
 *  在追求,有序又需要高效率的同时,使用它
 *
 *
 * @author CodeYang
 * @version 2020/12/28 16:51
 */
public class LinkedHashMap类的使用 {
    public static void main(String[] args) {
        // LinkedHashMap 是 哈希表+链表(循环双向链表)
        // 一样符合Map的特点 key相同做覆盖
        // 为什么有序:
       /*
        因为 内部有一个 Entry<K,V> 类继承了 hashmap的内部节点  HashMap.Node<K,V> 的
        但是 多了一个 before, after 之前 与 之后的节点类,
        注意: LinkedHashMap 的有序:是根据插入顺序的有序
       static class Entry<K,V> extends HashMap.Node<K,V> {
            LinkedHashMap.Entry<K,V> before, after;
            Entry(int hash, K key, V value, HashMap.Node<K,V> next) {
                super(hash, key, value, next);
            }
        }*/
        LinkedHashMap<Object, Object> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("1",1);
        linkedHashMap.put("2",2);
        linkedHashMap.put("3",3);
        linkedHashMap.put("4",4);
        linkedHashMap.put("4",999);

        for (Map.Entry<Object, Object> entry : linkedHashMap.entrySet()) {
            System.out.println(entry);
        }
    }
}
